def max_path_sum(triangle):
    # 从三角形的倒数第二行开始，向上计算每行的最大路径和
    for i in range(len(triangle) - 2, -1, -1):
        for j in range(len(triangle[i])):
            # 选择下一行相邻两个数中较大的一个加上当前元素
            triangle[i][j] += max(triangle[i + 1][j], triangle[i + 1][j + 1])
    # 三角形顶点的元素即为最大路径和
    return triangle[0][0]

# 读取输入
n = int(input())
triangle = [list(map(int, input().split())) for _ in range(n)]

# 计算并输出结果
print(max_path_sum(triangle))